/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo.tableModels;

import modelo.dominio.Usuario;
import java.awt.HeadlessException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;



/**
 *
 * @author Felipe
 */
public class Usuario_TableModel extends AbstractTableModel{

    public static final int ID_INDEX = 0;
    public static final int NOMBRE1_INDEX = 1;
    public static final int NOMBRE2_INDEX = 2;
    public static final int APELLIDOPAT_INDEX = 3;
    public static final int APELLIDOMAT_INDEX = 4;
    public static final int TIPO_INDEX = 5;

    protected String[] columnNames = {"ID","NOMBRE 1","NOMBRE 2","APELLIDO PATERNO","APELLIDO MATERNO","TIPO"};
    protected List<Usuario> dataVector;

    public Usuario_TableModel() {
        dataVector = new ArrayList<Usuario>();
    }

    public Usuario_TableModel(String[] nombresColumnas){
        this.columnNames = nombresColumnas;
        dataVector = new ArrayList<Usuario>();
    }

    @Override
    public String getColumnName(int column){
        return columnNames[column];
    }

    @Override
    public boolean isCellEditable(int row,int column){
        if(column == ID_INDEX){
            return false;
        }else{
            return true;
        }
    }

    @Override
    public Class getColumnClass(int column){
        switch(column){
            case ID_INDEX:
                return Integer.class;
            default:
                return String.class;
        }
    }

    @Override
    public Object getValueAt(int row, int column){
        Usuario usuario = dataVector.get(row);
        switch(column){
            case ID_INDEX:
                return usuario.getId();
            case NOMBRE1_INDEX:
                return usuario.getNombre1();
            case NOMBRE2_INDEX:
                return usuario.getNombre2();
            case APELLIDOPAT_INDEX:
                return usuario.getApellidoP();
            case APELLIDOMAT_INDEX:
                return usuario.getApellidoM();
            case TIPO_INDEX:
                return usuario.getClass().getSimpleName();
            default:
                return new Object();
        }
    }

    @Override
    public int getRowCount() {
        return dataVector.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public void setValueAt(Object value, int row, int column) {
        try {
            Usuario record = (Usuario) dataVector.get(row);
            //JOptionPane.showMessageDialog(null, value.getClass().getName());
            switch (column) {
                case ID_INDEX:
                    record.setId((Integer) value);
                    break;
                case NOMBRE1_INDEX:
                    record.setNombre1((String) value);
                    break;
                case NOMBRE2_INDEX:
                    record.setNombre2((String) value);
                    break;
                case APELLIDOPAT_INDEX:
                    record.setApellidoP((String) value);
                    break;
                case APELLIDOMAT_INDEX:
                    record.setApellidoM((String) value);
                    break;/*case TIPO_INDEX:
                record.setAlipass((List<Credencial>) value);
                break;*/
                default:
                    JOptionPane.showMessageDialog(null, "Indice inválido");
            }
            fireTableCellUpdated(row, column);
        } catch (HeadlessException headlessException) {
            System.out.print(headlessException.getMessage());
        }
    }

    public void addEmptyRow(){
        dataVector.add(new Usuario());
        fireTableRowsInserted(dataVector.size() - 1, dataVector.size()-1);
    }

    public void setData(List<Usuario> usuarios){
        this.dataVector = usuarios;
        this.fireTableDataChanged();
    }

    @Override
    public void fireTableDataChanged(){
        this.fireTableChanged(new TableModelEvent(this));
    }

    public List<Usuario> getDatos(){
        return dataVector;
    }
}
